--- title: "StringBuilder API" created: 2025-12-19 --- # StringBuilder API ### 增 (Append & Insert) 这是最常用的功能,支持**链式调用**(Method Chaining)。 ``` StringBuilder sb = new StringBuilder(); // 1. append(内容): 追加到末尾 (最常用) // 相当于 C++ 的 += 或 push_back sb.append("Hello"); sb.append(' '); sb.append(123); // 链式调用 sb.append(" World").append("!"); // 2. insert(索引, 内容): 插到指定位置 // 相当于 C++ 的 string::insert sb.insert(0, "Start: "); // 在开头插入 ``` ### 2. 删 (Delete) 注意 Java 的区间通常是 **左闭右开** `[start, end)`。 ``` // 假设 sb = "0123456" // 1. deleteCharAt(int index): 删除指定位置的一个字符 // 相当于 C++ 的 erase(iterator) sb.deleteCharAt(2); // 删除索引2的字符 ('2') -> "013456" // 2. delete(int start, int end): 删除一段区间 [start, end) // 包含 start,不包含 end sb.delete(1, 3); // 删除索引1到2 -> "0456" ``` > **刷题技巧**:用 `StringBuilder` 模拟字符栈 > > - 入栈:`sb.append(c)` > - 出栈:`sb.deleteCharAt(sb.length() - 1)` > - 查看栈顶:`sb.charAt(sb.length() - 1)` > - 这种写法比 `Stack` 快非常多! ### 3. 改 (Modify & Replace) ``` // 1. setCharAt(int index, char ch): 修改指定位置的字符 // 相当于 C++ 的 s[i] = 'a' sb.setCharAt(0, 'X'); // 2. replace(int start, int end, String str): 替换一段区间的内容 sb.replace(0, 2, "AB"); // 把 [0, 2) 替换成 "AB" // 3. reverse(): 反转字符串 (LeetCode 神器) // C++ 需要 reverse(s.begin(), s.end()),Java 直接调这个 sb.reverse(); ``` ### 4. 查 (Query) ``` // 1. charAt(int index): 获取指定位置字符 // 相当于 C++ 的 s[i] char c = sb.charAt(0); // 2. length(): 获取长度 // 相当于 C++ 的 s.size() int len = sb.length(); // 3. substring(int start, int end): 截取子串 // 注意:这会返回一个新的 String 对象,不改变 sb 本身 String sub = sb.substring(1, 4); ``` | **位置** | **API** | **复杂度** | **C++ 对应** | | --- | --- | --- | --- | | **查头 (Head)** | `sb.charAt(0)` | \(O(1)\) | `s[0]` 或 `s.front()` | | **查尾 (Tail)** | `sb.charAt(sb.length() - 1)` | \(O(1)\) | `s.back()` | ### 5. 转换与清空 ``` // 1. toString(): 转回不可变的 String (最后输出结果用) String result = sb.toString(); // 2. setLength(0): 清空 StringBuilder (最高效的方法) // 相当于 C++ 的 s.clear() sb.setLength(0); ``` --- ### 总结速查表 | **操作** | **StringBuilder API** | **C++ std::string 对应** | | --- | --- | --- | | **追加** | `sb.append(x)` | `s += x` 或 `push_back(x)` | | **获取字符** | `sb.charAt(i)` | `s[i]` | | **修改字符** | `sb.setCharAt(i, c)` | `s[i] = c` | | **删除最后** | `sb.deleteCharAt(sb.length()-1)` | `s.pop_back()` | | **反转** | `sb.reverse()` | `reverse(s.begin(), s.end())` | | **长度** | `sb.length()` | `s.size()` or `s.length()` | | **转字符串** | `sb.toString()` | (本身就是 string) |